home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 January: Mac OS SDK / Dev.CD Jan 98 SDK2.toast / Development Kits (Disc 2) / ScriptX / Code Samples / autofind / source / modelcar.sx < prev    next >
Encoding:
Text File  |  1996-05-21  |  4.3 KB  |  122 lines  |  [TEXT/ttxt]

  1. --<<<-
  2. -- Filename: 
  3. --     modelcar.sx
  4.  
  5. -- Other Files Required:
  6. --     graphble.sx
  7.  
  8. -- Purpose:  
  9. --     Class definition for the graphable ModelCar class and title container.
  10.  
  11. -- Specialized Classes:  
  12. --     ModelCar
  13.  
  14. -- Instructions to User:
  15. --     Defines the model car class, which is an object representing a car model.
  16. --     A ModelCar title container can be dropped into a Grapher.
  17.  
  18. -- Author:
  19. --     Steve Gano, Dionn Stewart, Ray Davis
  20.  
  21. in module Autofinder
  22.  
  23. if (not isDefined AxisProperty) do fileIn theScriptDir name:"axisprop.sx"
  24. if (not isDefined Graphable) do fileIn theScriptDir name:"graphble.sx"
  25.  
  26. -- Class ModelCar is a simple aggregate of data properties.
  27. class ModelCar (Graphable)
  28. instance variables
  29.     name                -- a string, the name of the ModelCar
  30.     classification        -- a string, the type of ModelCar (e.g., "Station Wagon")
  31.     modelyear            -- an integer, the year of the ModelCar
  32.     baseprice                -- an integer, the base sticker price of the ModelCar
  33.     averageprice            -- an integer, the average price paid for the ModelCar
  34.     fiveyeartradein        -- an integer, the projected 5-year trade in value of the ModelCar
  35.     citymileage            -- an integer, miles per gallon, city driving
  36.     highwaymileage        -- an integer, miles per gallon, highway driving
  37.     combinedmileage        -- an integer, miles per gallon, city & highway driving
  38.     firstyearservicecost    -- an integer, average service cost in first year
  39.     cargocapacity            -- an integer, cubic feet of storage
  40.     zerotosixty            -- an integer, number of seconds to accelerat to 60 mph
  41.     sixtytozero            -- an integer, number of feet to stop from 60 mph
  42. class methods
  43.     method init self #rest args -> (
  44.         apply nextMethod self args
  45.         local carProperties := #(
  46.             @averageprice:    #("Average Price", "dollars", 15000, 30000,averagePriceGetter),
  47.             @baseprice:        #("Base Price", "dollars", 10000, 30000,basePriceGetter),
  48.             @cargocapacity:    #("Cargo Capacity", "cu. ft.", 5.0, 20.0,cargoCapacityGetter),
  49.             @citymileage:    #("City Mileage", "MPG", 15, 25,cityMileageGetter),
  50.             @combinedmileage:#("Combined Mileage", "MPG", 20, 30,combinedMileageGetter),
  51.             @firstyearservicecost:#("First Year Service Cost", "dollars", 100, 400, firstYearServiceCostGetter),
  52.             @fiveyeartradein:#("Five Year Trade In", "dollars", 8000, 40000,fiveYearTradeInGetter),
  53.             @highwaymileage:#("Highway Mileage", "MPG", 20, 35,highwayMileageGetter),
  54.             @sixtytozero:    #("Stopping Distance", "feet", 100, 200,sixtyToZeroGetter),
  55.             @zerotosixty:    #("Zero to Sixty", "secs.", 5.0, 15.0,zeroToSixtyGetter)
  56.             )
  57.         forEachBinding carProperties (key val arg ->
  58.             local prop:= new AxisProperty axisTarget:val[1] \
  59.                 minValue:val[3] maxValue:val[4] units:val[2] name:key
  60.             prop.minTarget:= prop.minValue as string
  61.             prop.maxTarget:= prop.maxValue as string
  62.             prop.getterFn :=val[5]
  63.             append self.axisProperties prop
  64.         ) self
  65.         self.axisProperties
  66.     )
  67.     -- Allow quick "positional argument" initialization.
  68.     method makeModelCar self averageprice baseprice cargocapacity citymileage \
  69.         classification combinedmileage firstyearservicecost fiveyeartradein \
  70.         highwaymileage modelyear name sixtytozero zerotosixty thumbnail ->
  71.     (
  72.         local newCar := object (ModelCar)
  73.             thumbnail:thumbnail
  74.             settings
  75.                 name:name
  76.                 classification:classification
  77.                 modelyear:modelyear
  78.                 baseprice:baseprice
  79.                 averageprice:averageprice
  80.                 fiveyeartradein:fiveyeartradein
  81.                 citymileage:citymileage
  82.                 highwaymileage:highwaymileage
  83.                 combinedmileage:combinedmileage
  84.                 firstyearservicecost:firstyearservicecost
  85.                 cargocapacity:cargocapacity
  86.                 zerotosixty:zerotosixty
  87.                 sixtytozero:sixtytozero
  88.         end
  89.         newCar
  90.     )
  91. end
  92.  
  93. method afterinit self {class ModelCar} #rest args ->
  94. (
  95.     -- if the modelcar is dropped on thejunkyard
  96.     self.dropAction:= (aData draggite loc ->
  97.         -- Hack to make adjustment for bitmap
  98.         local spot := new point x:(loc.x + 50) y:(loc.y + 50)
  99.         if (inside draggite.presentedby.dropspace spot) then
  100.         (
  101.             local traveltime:= 12
  102.  
  103.             -- have the modelcar drive off 
  104.             travel draggite (new point x:700 y:loc.y) traveltime
  105.  
  106.             -- Remove myself from the graph
  107.             addTimeCallback draggite.travelclock (d -> removeFromGraph d.presentedby d) \
  108.                 draggite #() (draggite.travelclock.time + traveltime) true
  109.         )
  110.         else
  111.         (
  112.             -- otherwise have the car return to its position
  113.             local list := #(draggite)
  114.             graphObjects draggite.presentedby list
  115.         )
  116.     )
  117.     self
  118. )
  119.  
  120. -->>>
  121. "Compiled modelcar.sx"
  122.